博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb学习-案例练习-图书管理-13-添加购物车的实现过程
阅读量:4302 次
发布时间:2019-05-27

本文共 4418 字,大约阅读时间需要 14 分钟。

这篇来做一个练习,就是图书详情页面,点击购买按钮,这本书添加到购物中。购物车中主要思想就是采用HashMap来存储数据。

 

1.需求场景

浏览器打开

显示图书列表,例如点击第一本进入该书的详情页。

点击购买,这本书被添加到购物中。

 

2.大致实现思路

这里来想一下大致实现的思路,就是product_info.jsp页面点击购买按钮,这个跳转到一个addCartServlet中,把book.id传过来,然后根据id去查询这本书,然后放入购物车页面,大致就是这么一个过程。

 

3.给购买按钮添加链接跳转

这里跳转到一个addCartServlet,关键是id需要传过来,找到product_info.jsp,找到添加这个元素位置,代码变动如下(红圈位置是代码变动)。

 

具体代码如下

 

4.创建AddCartServlet.java

这里先创建一个空的servlet文件

5.Dao/Service层代码

看看Dao层代码,由于这里我们根据id来查找图书,这个方法我们之前写过了,所以本次练习不需要更改Dao和Service层代码。

 

6.Servlet文件代码

package com.anthony.web.servlet;import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.anthony.domain.Book;import com.anthony.service.BookService;import com.anthony.service.BookServiceImpl;public class AddCartServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {				String id = request.getParameter("id");		//根据id去查找book		BookService bs = new BookServiceImpl();		Book book = bs.findBookById(id);				//从session中购物车取出来		HttpSession session = request.getSession();		Map
cart = (Map
) session.getAttribute("cart"); int num = 1; if(cart == null) { cart = new HashMap
(); } // 如果购物车中包含这本书,num就要加1 if(cart.containsKey(book)) { num = Integer.parseInt(cart.get(book)) + 1; } // 把图书放入购物车 cart.put(book, num+""); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

但是上面有一个问题,在这行代码cart.containsKey(book)

Book是一个高级对象,这个引用对象比较,虽然查找出来的book 和session中的book值一样,但是地址不一样,hashmap是根据hashcode去比较,这里我们来Book.java类重写下hashCode和equal方法。

@Override	public int hashCode() {		final int prime = 31;		int result = 1;		result = prime * result + ((id == null) ? 0 : id.hashCode());		return result;	}	@Override	public boolean equals(Object obj) {		if (this == obj)			return true;		if (obj == null)			return false;		if (getClass() != obj.getClass())			return false;		Book other = (Book) obj;		if (id == null) {			if (other.id != null)				return false;		} else if (!id.equals(other.id))			return false;		return true;	}

继续写Servlet代码,添加一个打印内容,可以点击继续购物或者点击查看购物车

package com.anthony.web.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.anthony.domain.Book;import com.anthony.service.BookService;import com.anthony.service.BookServiceImpl;public class AddCartServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {				response.setContentType("text/html;charset=UTF-8");		PrintWriter out = response.getWriter();		String id = request.getParameter("id");		//根据id去查找book		BookService bs = new BookServiceImpl();		Book book = bs.findBookById(id);				//从session中购物车取出来		HttpSession session = request.getSession();		Map
cart = (Map
) session.getAttribute("cart"); int num = 1; if(cart == null) { cart = new HashMap
(); } // 如果购物车中包含这本书,num就要加1 if(cart.containsKey(book)) { num = Integer.parseInt(cart.get(book)) + 1; } // 把图书放入购物车 cart.put(book, num+""); // 把cart对象放回session作用域中 session.setAttribute("cart", cart); out.print("
继续购物
查看购物车"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

上面就添加了字符集设置和最后一行out输出,里面链接跳转。

下面来在cart.jsp页面中写一个循环,因为购物车列表存在多条数据的情况,下面代码主要看49-73行

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>电子书城
首页    >    购物车
序号 商品名称 价格        数量 库存 小计 取消
${vs.count} ${entry.key.name } ${entry.key.price } ${entry.key.pnum} ${entry.key.price*entry.value} X
合计:  ${total}元
    

保存代码,接下来进行部署测试

 

7.部署测试

保存代码,部署重启Tomcat服务器,然后来点击购买和查看购物车操作。

点击购买之后,跳转页面输出如下内容。

这里点击继续购物,再买一本。然后点击查看购物车。

 

转载地址:http://knows.baihongyu.com/

你可能感兴趣的文章
设计模式06_原型
查看>>
设计模式07_建造者
查看>>
设计模式08_适配器
查看>>
设计模式09_代理模式
查看>>
设计模式10_桥接
查看>>
设计模式11_装饰器
查看>>
设计模式12_外观模式
查看>>
设计模式13_享元模式
查看>>
设计模式14_组合结构
查看>>
设计模式15_模板
查看>>
海龟交易法则01_玩风险的交易者
查看>>
CTA策略02_boll
查看>>
vnpy通过jqdatasdk初始化实时数据及历史数据下载
查看>>
设计模式19_状态
查看>>
设计模式20_观察者
查看>>
vnpy学习10_常见坑02
查看>>
用时三个月,终于把所有的Python库全部整理了!拿去别客气!
查看>>
pd.stats.ols.MovingOLS以及替代
查看>>
vnpy学习11_增加测试评估指标
查看>>
资金流入流出计算方法
查看>>